#include<iostream>
#include<algorithm>
#include<vector>
using namespace std;
int main() {
    /*小A学长终于有机会参加ACM ICPC Final（ICPC总决赛），能够和世界上一群最聪明的大脑同场竞技，
    小A可以算得上是人生赢家，而且还是和女朋友组队参加的，而且。。。，总之，无限美好，在比赛现场，
    小A大杀四方。
  ... ...
突然一阵急促的闹铃声把小A从睡梦中惊醒，早上第一节有课，赶快起床了，请问小A醒来之前在睡梦中最多做了
几道题呢？
输入
  第一行输入一个整数n表示题目的数量（1<n<=15)
   第二行输入一个整数，表示小A在梦中从比赛开始到梦醒经过的时间，时间以秒为单位。
   第三行输入n个整数，表示每一道题一血的时间，以秒为单位，如果没人做出，记为-1。
   （一血指一道题从比赛开始到第一个做出这道题的时间）

输出
输出一个整数，表示小A在睡梦中可能做出的最多题目数。
样例输入 Copy
5
8000
9800  -1 1885 603 -1
样例输出 Copy
2*/
    int n, m;
    cin >> n >> m;
    vector<int>arr;//不能写成vector<int>arr(n);，否则默认初始化有n个0，会导致下面计数错误，放心push_back会自动添加数据
    for (int i = 0; i < n; i++) {
        int at;
        cin >> at;
        if (at != -1) {
            arr.push_back(at);//容器名 . push_back(要加进去的变量名称);
        }
    }
    sort(arr.begin(), arr.end());//要有algorithm头文件，普通数组排序是sort(arr, arr + 5), 默认状态下是从小到大
    int countnum = 0;//   sort(arr,arr+5,greater<int>())是按照从大到小排序; vector容器就是在名称后加上.begin(),.end()
    int counttt = 0;
    for (int time : arr) {//for(数据类型 中间变量名 :  容器或数组名)表示自动检索数组中每一个数
        if (counttt+time <= m) {// 贪心 其实就是把加变量<总时间就OK，很简单
            counttt += time;
            countnum++;
        }
    }
    cout << countnum;
    return 0;

}